package com.cskaoyan.javase.method._0introduction;

/**
 * 全新的版本，使用方法来改进案例，复用代码
 * 引例，现在有三个需求：
 * 编写程序，计算10+20，并输出结果
 * 编写程序，计算111+222，并输出结果
 * 编写程序，计算333+444，并输出结果
 *
 * 方法定义的语法结构：
 * [修饰符列表] 返回值类型 方法名 (形式参数列表){
 *   //方法体
 * }
 * 先讲两个概念：
 *      1.方法头（方法的声明）。在Java中方法中的"[修饰符列表] 返回值类型 方法名 (形式参数列表)"合起来称之为方法头
 *      2.方法的签名。方法的签名是用来唯一的确定一个方法的。在Java中"方法名 (形式参数列表)"它们合起来称之为方法的签名
 *
 * 接下来逐一解释方法的语法结构：
 * 1.[修饰符列表]。方法的修饰符组成的列表就是修饰符列表。Java中修饰符列表是可以为空的，可以不写。限于我们目前的学习进度，我们默认它的修饰符列表是public static。
 * 2.返回值类型：返回值的数据类型，可以是基本数据类型，当然也可以是引用数据类型
 *      返回值：方法执行完后，是有可能有结果的。这个结果就是返回值
 * 3.方法名。方法在调用时，方法调用者输入的名称。方法名是一个标识符，它遵循小驼峰式的命名规范
 *      而且最好见名知意，而且方法多表示操作，动作。所以方法名往往带有动词
 *      获取最大值：getMaxValue
 * 4.形式参数列表：形式参数组成的列表。
 *      形式参数：方法在调用时，可能需要输入一个数据作为参数，那么这个数据到底是什么数据类型呢？
 *          而且数据传入后，在方法体中，又怎么去使用它呢？
 *          解决以上两个问题，就需要形式参数
 *          所以形式参数（简称形参）就包括两个部分，语法是：数据类型 变量名
 *          形参形参只是一个形式，不是真正的数据。形参完全可以理解成一个占位符，它的作用只是告诉方法的调用者，该传入什么类型的参数。
 *          和形参相对应的就是实际参数（简称实参）。实参是方法在调用时，传入的具体数据。
 *          形参是方法定义时写的，实参是方法调用时传入的具体数据。
 * 5.方法体。就是方法为了实现功能，所写的一系列语句。
 *
 * 以上就是方法定义的语法，接下来我们来具体定义一个方法。
 *
 * 方法的定义位置：方法应该定义在类体中，其它方法外部，方法不能嵌套定义。
 *
 * 如果在方法头中,明确该方法有返回值,那么就必须在方法体中指出它的返回值是什么.
 * 语法:  return 值(表达式);
 *
 * 方法定义完毕后,开始进行方法的调用
 *
 * 在同一个类的main方法中,如果一个方法的修饰符列表有static修饰的话,那么可以直接在main方法中,用方法名直接调用该方法.
 *
 * 操作方法的调用,实际上操作它的返回值.返回值对应的数据类型,能够做的操作,方法的调用都可以直接操作
 *
 * 细节问题:
 *      1.main方法是程序的入口方法,任何其它方法和代码想要被执行,必须直接或者间接的在main方法中调用.
 *      2.Java的方法互相之间是平行的关系,定义位置对执行结果是没有影响的
 *
 *  @since 14:37
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class NewDemo {
    public static void main(String[] args) {
        // 直接用方法名调用sum方法
        // 方法在调用时,需要传入具体的实参
        int a = 10;
        // Result of 'NewDemo.sum()' is ignored
        // 方法如果有返回值,一般情况下尽量去利用它的返回值
        int sumValue = sum(a, 10);
        System.out.println(sumValue);

        System.out.println(sum(20, 20));
        // int i = sum(1, 1) / 1;
        System.out.println("------------------------");

        // System.out.println(test().length());
    }

    // 需求: 求两个int类型参数的和
    public static int sum(int num1, int num2) {
        // Missing return statement
        // 缺少返回值语句
        // Local variable 'sumValue' is redundant
        return num1 + num2;
    }

    public static String test(){
        return "hello world";
    }

}
